package m1_simple;

import com.rabbitmq.client.*;

import java.io.IOException;

//简单模式---消费者
public class Consumer {

    public static void main(String[] args) throws Exception{

        //1.建立连接和通道
        ConnectionFactory f = new ConnectionFactory();

        f.setHost("192.168.64.140");
        f.setPort(5672); //注意 这个端口号 这个端口号 是用来通信的 （类比mysql的3306端口） 15672只是访问mq客户端页面的一个端口
        f.setUsername("admin");
        f.setPassword("admin");

        Connection con = f.newConnection(); //由mq服务器去判断是要新建一个TCP连接 还是 重用之前的连接。这步要抛异常

        Channel c = con.createChannel(); //建立channel通道

        //2.定义队列 helloworld
        //消费者 和  提供者 谁先启动 谁去定义队列。（如果消费者先启动 而 服务者还没启动时，消费者就先往mq中新建队列）

        c.queueDeclare("helloworld",false,false,false,null);

        //3.创建回调对象 （deliverCallback）

        DeliverCallback deliverCallback = new DeliverCallback() {
            @Override
            public void handle(String consumerTag, Delivery message) throws IOException {
                //3.1 处理从channel中获取到的消息
                byte[] a = message.getBody();
                String msg = new String(a); //把a 转成 String

                System.out.println("收到消息："+msg);

            }
        };

        CancelCallback cancelCallback = new CancelCallback() {
            @Override
            public void handle(String consumerTag) throws IOException {

            }
        };

        //3.消费，或者说接收消息 (消息被消费者接收到以后，mq服务器不会再保留这个消息，在mq的主页中message处就不会有这条消息的痕迹了)

        c.basicConsume("helloworld",true,deliverCallback,cancelCallback);

    }

}
